/**
 * 实际上, 前面讲到的泛型工具类型(比如,Partial<Type>)都是基于映射实现的
 * 
 */

type Props = {a:number;b:string;c:boolean}

type PartialProps = Partial<Props>

// type Partial<T> = {
    // T => {a:number;b:string;c:boolean} 3中类型
    // P => 'a'|'b'|'c' 3中联合类型中的一种
    // 1.执行 keyof Props 拿到对象类型Props中的所有键的联合类型, 'a'|'b'|'c'
    // 2.Key in 代表是拿到的 abc中人任意一个,即Props所有的键名中的任意一个
    // T[P] => 获取T中每个键对应的类型,'a'的类型是number,b则是string


//     [P in keyof T]?: T[P]
// }


/**
 * 1.keyof T 即 keyofProps 表示获取Props的所有键的联合类型,也就是 'a'|'b'|'c'
 * 2.在[]后面加?,表示将这些属性变为可选的,从而实现Partial功能
 * 3.冒号后面的T[P]表示 获取T中每个键对应的类型。比如,'a'的类型是number,b则是string
 * 4.最终,新类型PartialProps和旧类型Props结构完全相同,只是让所有类型变为可选了
 */


